<?php
/****
图像处理类，主要是求得缩略图,水印和验证码
****/

class ImageTool{
	//分析传入的图像$image，返回图像信息的数组
	public  static function imageInfo($image){
		//判断图像是否存在
		if(!file_exists($image)){
			return false;
		}
		$info=getimagesize($image);
		if($info==false){
			return false;
		}
		$img['width']=$info[0];
		$img['height']=$info[1];
		$img['ext']=substr($info['mime'],strpos($info['mime'],'/')+1);

		return $img;
	}

	/****
	加入水印到图像,$dstImage-待操作图像,$watImage-水印图,
	$save-不填则默认替换原始图，$alpha-透明度
	****/
	public function waterMark($dstImage,$watImage,$save=null,$pos=2,$alpha=50){
		if(!file_exists($dstImage)||!file_exists($watImage)){
	        return false;
        }
		//首先保证水印不能大于待操作图片
        $dstInfo=self::imageInfo($dstImage);
        $watInfo=self::imageInfo($watImage);
        if($watInfo['height']>$dstInfo['height']||$watInfo['width']>$dstImage['width']){
        	return false;
        }
        //将2张图读到画布上,根据不同的后缀，动态加载读入函数
        $dstFunc='imagecreatefrom'.$dstInfo['ext'];//读入待操作图像函数
        $watFunc='imagecreatefrom'.$watInfo['ext'];//读入水印图像函数
        if(!function_exists($dstFunc)||!function_exists($watFunc)){
        	return false;

        }
        //动态加载函数创建画布
        $dimg=$dstFunc($dstImage);//创建待操作的画布
        $wimg=$watFunc($watImage);//创建水印画布
        //根据水印的位置计算粘贴的坐标
        switch ($pos) {
        	case 0://左上角
        		$posx=0;
        		$posy=0;
        		break;
        	case 1://右上角
        		$posx=$dstInfo['width']-$watInfo['width'];
        		$posy=0;
        		break;
        	case 3://左下角
        		$posx=0;
        		$posy=$dstInfo['height']-$watInfo['height'];
        		break;

        	default:
        		$posx=$dstInfo['width']-$watInfo['width'];
        		$posy=$dstInfo['height']-$watInfo['height'];
        		break;
        }
        //加入水印
        imagecopymerge($dimg,$wimg,$posx,$posy,0,0,$watInfo['width'],$watInfo['height'],$alpha);
        //保存
        if(!$save){
        	$save=$dstImage;
        	unlink($dstImage);
        }
        $createfunc='image'.$dstInfo['ext'];
        createfunc($dstImage,$save);

        imagedestroy($dstImage);
        imagedestroy($watImage);

        return true;
	}

	/****
	thumbImg 生成缩略图
	****/
	public static function thumbImg($dstImg,$save=NULL,$w=200,$h=200){
		//首先判断待处理的图片是否存在
		$dstInfo=self::imageInfo($dstImg);
		if($dstInfo==false){
			return false;
		}
	// 计算缩放比例
        $calc = min($w/$dstInfo['width'], $h/$dstInfo['height']);

        // 创建原始图的画布
        $dstFunc = 'imagecreatefrom' . $dstInfo['ext'];
        $dim = $dstFunc($dstImg);

        // 创建缩略画布
        $tim = imagecreatetruecolor($w,$h);

        // 创建白色填充缩略画布
        $white = imagecolorallocate($tim,255,255,255);

        // 填充缩略画布
        imagefill($tim,0,0,$white);

        // 复制并缩略
        $dw= (int)$dstInfo['width']*$calc;
        $dh= (int)$dstInfo['height']*$calc;

        $paddingx = (int)($w - $dw) / 2;
        $paddingy = (int)($h - $dh) / 2;


        imagecopyresampled($tim,$dim,$paddingx,$paddingy,0,0,$dw,$dh,$dstInfo['width'],$dstInfo['height']);

        // 保存图片
        if(!$save) {
            $save = $dstImg;
            unlink($dstImg);
        }

        $createFunc = 'image' . $dstInfo['ext'];
        $createFunc($tim,$save);

        imagedestroy($dim);
        imagedestroy($tim);

        return true;
	}

	 //写验证码
   
    public static function captcha($width=50,$height=25) {
            //造画布
            $image = imagecreatetruecolor($width,$height) ;
           
            //造背影色
            $gray = imagecolorallocate($image, 200, 200, 200);
           
            //填充背景
            imagefill($image, 0, 0, $gray);
           
            //造随机字体颜色
            $color = imagecolorallocate($image, mt_rand(0, 125), mt_rand(0, 125), mt_rand(0, 125)) ;
            //造随机线条颜色
            $color1 =imagecolorallocate($image, mt_rand(100, 125), mt_rand(100, 125), mt_rand(100, 125));
            $color2 =imagecolorallocate($image, mt_rand(100, 125), mt_rand(100, 125), mt_rand(100, 125));
            $color3 =imagecolorallocate($image, mt_rand(100, 125), mt_rand(100, 125), mt_rand(100, 125));
           
            //在画布上画线
            imageline($image, mt_rand(0, 50), mt_rand(0, 25), mt_rand(0, 50), mt_rand(0, 25), $color1) ;
            imageline($image, mt_rand(0, 50), mt_rand(0, 20), mt_rand(0, 50), mt_rand(0, 20), $color2) ;
            imageline($image, mt_rand(0, 50), mt_rand(0, 20), mt_rand(0, 50), mt_rand(0, 20), $color3) ;
           
            //在画布上写字
            $text = substr(str_shuffle('ABCDEFGHIJKMNPRSTUVWXYZabcdefghijkmnprstuvwxyz23456789'), 0,4) ;
            imagestring($image, 5, 7, 5, $text, $color) ;
           
            //显示、销毁
            header('content-type: image/jpeg');
            imagejpeg($image);
            imagedestroy($image);
    }

}

//echo ImageTool::thumbImg('./home.jpg','./aa.jpg',200,200)?'OK':'33';
?>